#include <wx/checkbox.h>
#include "wxscheckbox.h"

namespace {
  wxsRegisterItem<wxsCheckBox> Reg( _T( "CheckBox" ), _T( "复选框" ), wxsTWidget, _T( "标准" ), 330 );
  WXS_ST_BEGIN( wxsCheckBoxStyles, _T( "" ) )
  WXS_ST_CATEGORY( "wxCheckBox" )
  WXS_ST( wxCHK_2STATE )
  WXS_ST( wxCHK_3STATE )
  WXS_ST( wxCHK_ALLOW_3RD_STATE_FOR_USER )
  WXS_ST( wxALIGN_RIGHT )
  WXS_ST_DEFAULTS()
  WXS_ST_END()
  WXS_EV_BEGIN( wxsCheckBoxEvents )
  WXS_EVI( EVT_CHECKBOX, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEvent, Click )
  WXS_EV_END()
}

wxsCheckBox::wxsCheckBox( wxsItemResData* Data ):
  wxsWidget( Data, &Reg.Info, wxsCheckBoxEvents, wxsCheckBoxStyles ), Label( _T( "标题" ) ), IsChecked( false ) {}

void wxsCheckBox::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
    case wxsCPP: {
      AddHeader( _T( "<wx/checkbox.h>" ), GetInfo().ClassName, hfInPCH );
      Codef( _T( "%C(%W, %I, %t, %P, %S, %T, %V, %N);\n" ), Label.wx_str() );
      Codef( _T( "%ASetValue(%b);\n" ), IsChecked );
      BuildSetupWindowCode();
      return;
    }
    case wxsUnknownLanguage:
    default: {
      wxsCodeMarks::Unknown( _T( "wxsCheckBox::OnBuildCreatingCode" ), GetLanguage() );
    }
  }
}

wxObject* wxsCheckBox::OnBuildPreview( wxWindow* Parent, long Flags ) {
  wxCheckBox* Preview = new wxCheckBox( Parent, GetId(), Label, Pos( Parent ), Size( Parent ), Style() );
  if( IsChecked ) {
    Preview->SetValue( IsChecked );
  }
  return SetupWindow( Preview, Flags );
}

void wxsCheckBox::OnEnumWidgetProperties( M_Code_unused long Flags ) {
  WXS_SHORT_STRING( wxsCheckBox, Label, _T( "标题" ), _T( "label" ), _T( "" ), false )
  WXS_BOOL( wxsCheckBox, IsChecked, _T( "缺省" ), _T( "checked" ), false )
}
